{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# <center/>使用PyNative进行神经网络的训练调试体验"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 概述"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "在神经网络训练过程中，数据是否按照自己设计的神经网络运行，是使用者非常关心的事情，如何去查看数据是怎样经过神经网络，并产生变化的呢？这时候需要AI框架提供一个功能，方便使用者将计算图中的每一步变化拆开成单个算子或者深层网络拆分成多个单层来调试观察，了解分析数据在经过算子或者计算层后的变化情况，MindSpore在设计之初就提供了这样的功能模式--`PyNative_MODE`，与此对应的是`GRAPH_MODE`，他们的特点分别如下：\n",
    "- PyNative模式：也称动态图模式，将神经网络中的各个算子逐一下发执行，方便用户编写和调试神经网络模型。\n",
    "- Graph模式：也称静态图模式或者图模式，将神经网络模型编译成一整张图，然后下发执行。该模式利用图优化等技术提高运行性能，同时有助于规模部署和跨平台运行。\n",
    "\n",
    "默认情况下，MindSpore处于PyNative模式，可以通过`context.set_context(mode=context.GRAPH_MODE)`切换为Graph模式；同样地，MindSpore处于Graph模式时，可以通过`context.set_context(mode=context.PYNATIVE_MODE)`切换为PyNative模式。\n",
    "\n",
    "<br/>本次体验我们将使用一张手写数字图片跑完单次训练，在PyNative模式下，将数据在训练中经过每层神经网络的变化情况打印出来，并计算对应的loss值以及梯度值`grads`，整体流程如下：\n",
    "\n",
    "1. 环境准备，设置PyNative模式。\n",
    "\n",
    "2. 数据集准备，并取用单张图片数据。\n",
    "\n",
    "3. 构建神经网络并设置每层断点打印数据。\n",
    "\n",
    "4. 构建梯度计算函数。\n",
    "\n",
    "5. 执行神经网络训练，查看网络各参数梯度。\n",
    "\n",
    "> 本文档适用于GPU和Ascend环境。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 环境准备\n",
    "\n",
    "使用`context.set_context`将模式设置成`PYNATIVE_MODE`。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "from mindspore import context\n",
    "\n",
    "context.set_context(mode=context.PYNATIVE_MODE, device_target = \"GPU\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 数据准备"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 数据集的下载"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "下载并解压数据集数据，将解压后的数据集移动到指定位置。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "./datasets/MNIST_Data\n",
      "├── test\n",
      "│   ├── t10k-images-idx3-ubyte\n",
      "│   └── t10k-labels-idx1-ubyte\n",
      "└── train\n",
      "    ├── train-images-idx3-ubyte\n",
      "    └── train-labels-idx1-ubyte\n",
      "\n",
      "2 directories, 4 files\n"
     ]
    }
   ],
   "source": [
    "!mkdir -p ./datasets/MNIST_Data/train ./datasets/MNIST_Data/test\n",
    "!wget -NP ./datasets/MNIST_Data/train https://mindspore-website.obs.myhuaweicloud.com/notebook/datasets/mnist/train-labels-idx1-ubyte \n",
    "!wget -NP ./datasets/MNIST_Data/train https://mindspore-website.obs.myhuaweicloud.com/notebook/datasets/mnist/train-images-idx3-ubyte\n",
    "!wget -NP ./datasets/MNIST_Data/test https://mindspore-website.obs.myhuaweicloud.com/notebook/datasets/mnist/t10k-labels-idx1-ubyte\n",
    "!wget -NP ./datasets/MNIST_Data/test https://mindspore-website.obs.myhuaweicloud.com/notebook/datasets/mnist/t10k-images-idx3-ubyte\n",
    "!tree ./datasets/MNIST_Data"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 数据集的增强操作"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "下载下来后的数据集，需要通过`mindspore.dataset`处理成适用于MindSpore框架的数据，再使用一系列框架中提供的工具进行数据增强操作来适应LeNet网络的数据处理需求。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "import mindspore.dataset.vision.c_transforms as CV\n",
    "import mindspore.dataset.transforms.c_transforms as C\n",
    "from mindspore.dataset.vision import Inter\n",
    "from mindspore import dtype as mstype\n",
    "import mindspore.dataset as ds\n",
    "import numpy as np\n",
    "\n",
    "def create_dataset(data_path, batch_size=32, repeat_size=1,\n",
    "                   num_parallel_workers=1):\n",
    "    \"\"\" create dataset for train or test\n",
    "    Args:\n",
    "        data_path (str): Data path\n",
    "        batch_size (int): The number of data records in each group\n",
    "        repeat_size (int): The number of replicated data records\n",
    "        num_parallel_workers (int): The number of parallel workers\n",
    "    \"\"\"\n",
    "    # define dataset\n",
    "    mnist_ds = ds.MnistDataset(data_path)\n",
    "\n",
    "    # define some parameters needed for data enhancement and rough justification\n",
    "    resize_height, resize_width = 32, 32\n",
    "    rescale = 1.0 / 255.0\n",
    "    shift = 0.0\n",
    "    rescale_nml = 1 / 0.3081\n",
    "    shift_nml = -1 * 0.1307 / 0.3081\n",
    "\n",
    "    # according to the parameters, generate the corresponding data enhancement method\n",
    "    resize_op = CV.Resize((resize_height, resize_width), interpolation=Inter.LINEAR)\n",
    "    rescale_nml_op = CV.Rescale(rescale_nml, shift_nml) \n",
    "    rescale_op = CV.Rescale(rescale, shift) \n",
    "    hwc2chw_op = CV.HWC2CHW()  \n",
    "    type_cast_op = C.TypeCast(mstype.int32)\n",
    "\n",
    "    # using map method to apply operations to a dataset\n",
    "    mnist_ds = mnist_ds.map(operations=type_cast_op, input_columns=\"label\", num_parallel_workers=num_parallel_workers)\n",
    "    mnist_ds = mnist_ds.map(operations=resize_op, input_columns=\"image\", num_parallel_workers=num_parallel_workers)\n",
    "    mnist_ds = mnist_ds.map(operations=rescale_op, input_columns=\"image\", num_parallel_workers=num_parallel_workers)\n",
    "    mnist_ds = mnist_ds.map(operations=rescale_nml_op, input_columns=\"image\", num_parallel_workers=num_parallel_workers)\n",
    "    mnist_ds = mnist_ds.map(operations=hwc2chw_op, input_columns=\"image\", num_parallel_workers=num_parallel_workers)\n",
    "   \n",
    "    # process the generated dataset\n",
    "    buffer_size = 10000\n",
    "    mnist_ds = mnist_ds.shuffle(buffer_size=buffer_size)\n",
    "    mnist_ds = mnist_ds.batch(batch_size, drop_remainder=True)\n",
    "    mnist_ds = mnist_ds.repeat(repeat_size)\n",
    "\n",
    "    return mnist_ds"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 数据图片的提取"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "本次体验我们只需要一张图片进行训练体验，所以随机选取`batch`中的第一张图片`image`和下标`label`。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(32, 1, 32, 32)\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 32 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "from mindspore import Tensor\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "train_data_path = \"./datasets/MNIST_Data/train/\" \n",
    "ms_dataset = create_dataset(train_data_path)\n",
    "dict_data = ms_dataset.create_dict_iterator()\n",
    "data= next(dict_data)\n",
    "images = data[\"image\"].asnumpy()\n",
    "labels = data[\"label\"].asnumpy()\n",
    "print(images.shape)\n",
    "count = 1\n",
    "for i in images:\n",
    "    plt.subplot(4, 8, count) \n",
    "    plt.imshow(np.squeeze(i))\n",
    "    plt.title('num:%s'%labels[count-1])\n",
    "    plt.xticks([])\n",
    "    count += 1\n",
    "    plt.axis(\"off\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "当前batch的image数据如上图，后面的体验将提取第一张图片进行训练操作。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 定义图像显示函数\n",
    "\n",
    "定义一个图像显示函数`image_show`，插入LeNet5的前面4层神经网络中抽取图像数据并显示。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "def image_show(x):\n",
    "    count = 1\n",
    "    x = x.asnumpy()\n",
    "    number = x.shape[1]\n",
    "    sqrt_number = int(np.sqrt(number))\n",
    "    for i in x[0]:\n",
    "        plt.subplot(sqrt_number,int(number/sqrt_number),count)\n",
    "        plt.imshow(i)\n",
    "        count += 1\n",
    "    plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 构建神经网络LeNet5\n",
    "在`construct`中使用`image_show`，查看每层网络后的图片变化。\n",
    "> 这里只抽取了图片显示，想要查看具体的数值，可以按照自己的需要进行`print(x)`。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "layer conv1: Conv2d<input_channels=1, output_channels=6, kernel_size=(5, 5),stride=(1, 1),  pad_mode=valid, padding=0, dilation=(1, 1), group=1, has_bias=False,weight_init=normal, bias_init=zeros>\n",
      "****************************************\n",
      "layer fc1: Dense<in_channels=400, out_channels=120, weight=Parameter (name=fc1.weight, value=[[-0.00758117 -0.01498233  0.01308791 ...  0.03045311 -0.00079244\n",
      "  -0.01519072]\n",
      " [-0.00077699 -0.01607893 -0.00215094 ... -0.00235667 -0.01918699\n",
      "  -0.00828544]\n",
      " [-0.00105981 -0.01547002 -0.01332507 ...  0.01294748  0.00878882\n",
      "   0.01031067]\n",
      " ...\n",
      " [ 0.01414873 -0.02673322  0.01534838 ...  0.00437457 -0.01688845\n",
      "  -0.00188475]\n",
      " [ 0.01756713 -0.0201801  -0.0223504  ...  0.00682346 -0.00856738\n",
      "   0.00753205]\n",
      " [-0.01119993  0.01894077 -0.02048291 ...  0.03681218 -0.01461048\n",
      "   0.0045935 ]]), has_bias=True, bias=Parameter (name=fc1.bias, value=[0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n",
      " 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n",
      " 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n",
      " 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n",
      " 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.])>\n"
     ]
    }
   ],
   "source": [
    "import mindspore.nn as nn\n",
    "import mindspore.ops as ops\n",
    "from mindspore import dtype as mstype\n",
    "from mindspore.common.initializer import Normal\n",
    "\n",
    "\n",
    "class LeNet5(nn.Cell):\n",
    "    \"\"\"Lenet network structure.\"\"\"\n",
    "    # define the operator required\n",
    "    def __init__(self, num_class=10, num_channel=1):\n",
    "        super(LeNet5, self).__init__()\n",
    "        self.conv1 = nn.Conv2d(num_channel, 6, 5, pad_mode='valid')\n",
    "        self.conv2 = nn.Conv2d(6, 16, 5, pad_mode='valid')\n",
    "        self.fc1 = nn.Dense(16 * 5 * 5, 120, weight_init=Normal(0.02))\n",
    "        self.fc2 = nn.Dense(120, 84, weight_init=Normal(0.02))\n",
    "        self.fc3 = nn.Dense(84, num_class, weight_init=Normal(0.02))\n",
    "        self.relu = nn.ReLU()\n",
    "        self.max_pool2d = nn.MaxPool2d(kernel_size=2, stride=2)\n",
    "        self.flatten = nn.Flatten()\n",
    "        self.switch = 1\n",
    "        \n",
    "    def construct(self, x):\n",
    "        \n",
    "        x = self.conv1(x)\n",
    "        if self.switch > 0:\n",
    "            print(\"The first layer: convolution layer\")\n",
    "            image_show(x)\n",
    "        x = self.relu(x)\n",
    "        x = self.max_pool2d(x)\n",
    "        if self.switch > 0:\n",
    "            print(\"The second layer: pool layer\")\n",
    "            image_show(x)\n",
    "        x = self.conv2(x)\n",
    "        if self.switch > 0:\n",
    "            print(\"The third layer: convolution layer\")\n",
    "            image_show(x)\n",
    "        x = self.relu(x)\n",
    "        x = self.max_pool2d(x)\n",
    "        if self.switch > 0:\n",
    "            print(\"The fourth layer: pool layer\")\n",
    "            image_show(x)\n",
    "        x = self.flatten(x)\n",
    "        x = self.relu(self.fc1(x))\n",
    "        x = self.relu(self.fc2(x))\n",
    "        x = self.fc3(x)\n",
    "        self.switch -= 1\n",
    "        return x\n",
    "\n",
    "network = LeNet5()\n",
    "print(\"layer conv1:\", network.conv1)\n",
    "print(\"*\"*40)\n",
    "print(\"layer fc1:\", network.fc1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 构建计算梯度函数GradWrap\n",
    "构建梯度下降求值函数，该函数可计算网络中所有权重的梯度。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "from mindspore import Tensor, ParameterTuple\n",
    "\n",
    "\n",
    "class GradWrap(nn.Cell):\n",
    "    \"\"\" GradWrap definition \"\"\"\n",
    "    def __init__(self, network):\n",
    "        super(GradWrap, self).__init__(auto_prefix=False)\n",
    "        self.network = network\n",
    "        self.weights = ParameterTuple(filter(lambda x: x.requires_grad, network.get_parameters()))\n",
    "\n",
    "    def construct(self, x, label):\n",
    "        weights = self.weights\n",
    "        return ops.GradOperation(get_by_list=True)(self.network, weights)(x, label)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 执行训练函数\n",
    "\n",
    "可以从网络中查看当前`batch`中第一张图片`image`的数据在神经网络中的变化，经过神经网络后，计算出其loss值，再根据loss值求参数的偏导即神经网络的梯度值，最后将梯度和loss进行优化。\n",
    "- image：为当前batch的第一张图片。\n",
    "- output：表示图片数据经过当前网络训练后生成的值，其张量为（1,10）。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The first layer: convolution layer\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 6 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The second layer: pool layer\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 6 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The third layer: convolution layer\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 16 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The fourth layer: pool layer\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 16 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "from mindspore.nn import WithLossCell, SoftmaxCrossEntropyWithLogits, Momentum\n",
    "\n",
    "net = LeNet5()\n",
    "optimizer = Momentum(filter(lambda x: x.requires_grad, net.get_parameters()), 0.1, 0.9)\n",
    "criterion = nn.SoftmaxCrossEntropyWithLogits(sparse=True, reduction='mean')\n",
    "net_with_criterion = WithLossCell(net, criterion)\n",
    "train_network = GradWrap(net_with_criterion)\n",
    "train_network.set_train()\n",
    "\n",
    "image = images[0][0]\n",
    "image = image.reshape((1,1,32,32))\n",
    "plt.imshow(np.squeeze(image))\n",
    "plt.show()\n",
    "input_data = Tensor(np.array(image).astype(np.float32))\n",
    "label = Tensor(np.array([labels[0]]).astype(np.int32))\n",
    "output = net(Tensor(input_data))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "将第一层卷积层、第二层池化层、第三层卷积层和第四层池化层的图像特征打印出来后，直观地看到随着深度的增加，图像特征几乎无法用肉眼识别，但是机器可以用这些特征进行学习和识别，后续的全连接层为二维数组，无法图像显示，但可以打印出数据查看，由于数据量过大此处就不打印了，用户可以根据需求选择打印。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 求loss值和梯度值，并进行优化\n",
    "\n",
    "先求得loss值，后再根据loss值求梯度（偏导函数值），使用优化器`optimizer`进行优化。\n",
    "- `loss_output`：即为loss值。\n",
    "- `grads`：即网络中每层权重的梯度。\n",
    "- `net_params`：即网络中每层权重的名称，用户可执行`print(net_params)`自行打印。\n",
    "- `success`：优化参数。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "conv1.weight: (6, 1, 5, 5)\n",
      "conv2.weight: (16, 6, 5, 5)\n",
      "fc1.weight: (120, 400)\n",
      "fc1.bias: (120,)\n",
      "fc2.weight: (84, 120)\n",
      "fc2.bias: (84,)\n",
      "fc3.weight: (10, 84)\n",
      "fc3.bias: (10,)\n",
      "Loss_value: 2.3025453\n"
     ]
    }
   ],
   "source": [
    "loss_output = criterion(output, label)\n",
    "grads = train_network(input_data, label)\n",
    "net_params = net.trainable_params()\n",
    "for i in range(len(grads)):\n",
    "    print(\"{}:\".format(net_params[i].name),grads[i].shape)\n",
    "success = optimizer(grads)\n",
    "loss = loss_output.asnumpy()\n",
    "print(\"Loss_value:\",loss)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "具体每层权重的参数有多少，从打印出来的梯度张量能够看到，对应的梯度值用户可以自行选择打印。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 总结"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "本次体验我们将MindSpore的数据增强后，使用了`create_dict_iterator`转化成字典，再单独取出来；使用PyNative模式将神经网络分层单独调试，提取并观察数据；用`WithLossCell`在PyNative模式下计算loss值；构造梯度函数`GradWrap`将神经网络中各个权重的梯度计算出来，以上就是本次的全部体验内容。"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "MindSpore-1.0.1",
   "language": "python",
   "name": "mindspore-1.0.1"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}